package com.foreknow.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 什么是Session
 * Session是服务器端的会话技术,服务器在运行的过程中会为每个用户单独创建一个Session对象.
 * Session可以被我们用户的浏览器所独享 所以当我们在访问Web资源的时候,可以把各自的数据保存在各自的Session中
 *
 * Session的核心
 * HttpSession: 主要用于保存会话的数据(浏览器不关闭持续登陆这种) 如何获取:req.getSession()方法来获取HttpSession接口
 * 如何保存Session数据 session.setAttribute("name","tom");
 * 如何获取Session数据 session.getAttribute("name"); 结果为:"tom"
 *
 * Session原理:
 * 1.第一次创建Session对象,会给Session分配一个唯一的id (JSESSIONID)
 * 2.摇奖JSESSIONID作为Cookie的值发送给浏览器保存
 * 3.在第二次访问的时候,浏览器会携带JSESSIONID的Cookie来访问服务器
 * 4.服务器得到JSESSIONID,在内存当中搜索是否存在对应编号的Session对象
 *
 * !注意!:!保存在Session中的数据,会被多个servlet/jsp所共享,只要浏览器不关闭,那么保存在Session中的数据就会一直生效!
 *
 */

public class SessionDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
//        获取到Session对象
        HttpSession session = req.getSession();
//        向Session中保存数据
        session.setAttribute("name","tom");
//        获取Session 的数据
        String name = (String) session.getAttribute("name");
        out.println(name+"---"+session.getId());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}
